package io.ebean.typequery.generator.write;
import java.io.File;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.net.InetAddress;
import java.net.URI;
import java.net.URL;
import java.sql.Timestamp;
import java.util.Calendar;
import java.util.Currency;
import java.util.HashMap;
import java.util.Map;
import java.util.TimeZone;
import java.util.UUID;
/**
* Holds the Property types and how they match to class types.
*/
public class PropertyTypeMap {
/**
* Property type for Db Json properties.
*/
private final PropertyType dbJsonType = new PropertyType("PJson");
private Map<String,PropertyType> map = new HashMap<>();
public PropertyTypeMap() {
map.put("boolean", new PropertyType("PBoolean"));
map.put("short", new PropertyType("PShort"));
map.put("int", new PropertyType("PInteger"));
map.put("long", new PropertyType("PLong"));
map.put("double", new PropertyType("PDouble"));
map.put("float", new PropertyType("PFloat"));
addType(Boolean.class);
addType(Short.class);
addType(Integer.class);
addType(Long.class);
addType(Double.class);
addType(Float.class);
addType(String.class);
addType(Timestamp.class);
map.put(java.sql.Date.class.getName(), new PropertyType("PSqlDate"));
map.put(java.util.Date.class.getName(), new PropertyType("PUtilDate"));
addType(java.sql.Time.class);
addType(TimeZone.class);
addType(BigDecimal.class);
addType(BigInteger.class);
addType(Calendar.class);
addType(Currency.class);
addType(File.class);
addType(InetAddress.class);
map.put(URI.class.getName(), new PropertyType("PUri"));
map.put(URL.class.getName(), new PropertyType("PUrl"));
map.put(UUID.class.getName(), new PropertyType("PUuid"));
addJava8Types();
addJodaTypes();
}
private void addType(Class<?> cls) {
String simpleName = cls.getSimpleName();
map.put(cls.getName(), new PropertyType("P"+simpleName));
}
private void addJava8Types() {
try {
Class.forName("java.time.Instant");
} catch (ClassNotFoundException e) {
return;
}
addType(java.time.DayOfWeek.class);
addType(java.time.Duration.class);
addType(java.time.Instant.class);
addType(java.time.LocalDate.class);
addType(java.time.LocalDateTime.class);
addType(java.time.LocalTime.class);
addType(java.time.Month.class);
addType(java.time.MonthDay.class);
addType(java.time.OffsetDateTime.class);
addType(java.time.OffsetTime.class);
addType(java.time.Year.class);
addType(java.time.YearMonth.class);
addType(java.time.ZoneId.class);
addType(java.time.ZoneOffset.class);
}
private void addJodaTypes() {
try {
Class.forName("org.joda.time.DateTime");
} catch (ClassNotFoundException e) {
return;
}
map.put(org.joda.time.DateTime.class.getName(), new PropertyType("PJodaDateTime"));
map.put(org.joda.time.DateMidnight.class.getName(), new PropertyType("PJodaDateMidnight"));
map.put(org.joda.time.LocalDate.class.getName(), new PropertyType("PJodaLocalDate"));
map.put(org.joda.time.LocalDateTime.class.getName(), new PropertyType("PJodaLocalDateTime"));
map.put(org.joda.time.LocalTime.class.getName(), new PropertyType("PJodaLocalTime"));
}
/**
* Return the property type for the given class description.
*/
public PropertyType getType(String classDesc) {
return map.get(classDesc);
}
/**
* Return the Db Json property type (for DbJson and DbJsonB).
*/
public PropertyType getDbJsonType() {
return dbJsonType;
}
}